package util.states;

import java.util.ArrayList;
import java.util.List;

import models.CalendarioAcademico;
import models.Periodo;
import models.users.EPState;
import services.DAO;
import util.Queries;

public class SubidaNotasState extends StateLogic {

	@Override
	public List<String> validateTransition() {
		List<Object[]> mensajes = DAO.executeNative(
				Queries.validateSubidaNotas(), -1, "idCalendarioAcademico",
				colegio.getIdCalendarioAcademicoActual(), "idPeriodo",
				colegio.getIdPeriodoActual());
		List<String> errores = new ArrayList<String>();
		for (Object[] mensaje : mensajes) {
			errores.add("Al profesor " + mensaje[0]
					+ " le faltan las notas de " + mensaje[1] + " en el curso "
					+ mensaje[2]);
		}
		return errores;
	}

	@Override
	public EPState getNext() {
		Periodo c = DAO.find(Periodo.class, colegio.getIdPeriodoActual());
		CalendarioAcademico pa = DAO.find(CalendarioAcademico.class,
				colegio.getIdCalendarioAcademicoActual());
		if (c.getNumero() == pa.getNumPeriodos())
			return EPState.CIERRE_PERIODO;
		return EPState.SUBIDA_NOTAS;
	}

	@Override
	public void enterTransition() {
		if (colegio.getIdPeriodoActual() == null) {
			Periodo nextPeriodo = DAO
					.execute(
							"SELECT c FROM Periodo c WHERE c.calendarioAcademico.id=:idCalendarioAcademico AND c.numero=:numero",
							1, "idCalendarioAcademico",
							colegio.getIdCalendarioAcademicoActual(), "numero",
							1);
			colegio.setIdPeriodoActual(nextPeriodo.getId());

		} else {
			Periodo c = DAO.find(Periodo.class, colegio.getIdPeriodoActual());
			Periodo nextPeriodo = DAO
					.execute(
							"SELECT c FROM Periodo c WHERE c.calendarioAcademico.id=:idCalendarioAcademico AND c.numero=:numero",
							1, "idCalendarioAcademico",
							colegio.getIdCalendarioAcademicoActual(), "numero",
							c.getNumero() + 1);
			colegio.setIdPeriodoActual(nextPeriodo.getId());

		}

	}

}
